home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / STRINGED.D < prev    next >
Encoding:
Modula Definition  |  1990-10-24  |  4.1 KB  |  126 lines

  1. DEFINITION MODULE StringEditor;
  2. (*$H+*)
  3.  
  4. (*
  5.  * Bietet Basisfunktion zum Eingeben und Ändern eines Strings über Tastatur.
  6.  * Dieses Modul wird u.A. von den Read-Funktionen in Terminal und TextWindows
  7.  * verwendet.
  8.  *)
  9.  
  10.  
  11. FROM MOSGlobals IMPORT Key;
  12.  
  13. TYPE
  14.  
  15.   Commands = (none, enter, abort, backspace, delete, insert,
  16.               clrln, clreol, sol, eol, left, right,
  17.               wdleft, wdright, delwdleft, delwdright);
  18.  
  19.   StdCmdProc = PROCEDURE  ( Key ): Commands;
  20.  
  21.   WrChProc  = PROCEDURE ( CHAR );
  22.   WrStrProc = PROCEDURE ( REF ARRAY OF CHAR );
  23.   CrsrProc  = PROCEDURE ( INTEGER );          (* Positiv: Cursor nach rechts *)
  24.   RdProc    = PROCEDURE ( VAR Commands, VAR CHAR );            (* Kein Echo! *)
  25.  
  26.  
  27. VAR StdCmd: StdCmdProc;
  28.      (*
  29.       * Diese Routine wird von den Read-Funktionen in Terminal & TextWindows
  30.       * aufgerufen, um Tastendrücke in Editierbefehle umzuwandeln.
  31.       * Standardmäßig ist die Funktion 'StdKeyCmd' (s.u.) darauf zugewiesen.
  32.       *)
  33.  
  34.  
  35. PROCEDURE Edit ( VAR s: ARRAY OF CHAR; ctrlAllowed: BOOLEAN;
  36.                  write: WrChProc; writeString: WrStrProc;
  37.                  moveCursor: CrsrProc; readCmd: RdProc );
  38.   (*
  39.    * Läßt Eingabe auf 's' zu.
  40.    * Diese Routine wird von den Read-Funktionen in Terminal & TextWindows
  41.    * aufgerufen, um eine Eingabe zu machen.
  42.    *
  43.    * 's' muß vorher initialiert sein (ggf. leeren!), ist er nicht leer,
  44.    * wird dessen Inhalt zur Eingabe übernommen.
  45.    *
  46.    * 'ctrlAllowed': TRUE:  Auch Controlzeichen (CHR(1)-CHR(31)) können
  47.    *                       editiert werden.
  48.    *
  49.    * Die anzugebenden Routinen zur Ein-/Ausgabe (sie können auch *lokale*
  50.    * Prozeduren sein!):
  51.    *   'write' gibt ein Zeichen aus (auch Control-Zeichen müssen ggf.
  52.    *      als sichtbare Zeichen dargestellt werden!)
  53.    *   'writeString' gibt einen längeren String aus (auch Control-Zeichen!)
  54.    *   'moveCursor' bewegt den Eingabecursor um die angegebene Anzahl nach
  55.    *      rechts (positiver Wert) oder nach links.
  56.    *   'readCmd' liest eine Taste ein und liefert dessen Zeichen und eine
  57.    *      Interpretation als Befehl. Das eingegebene Zeichen darf dabei
  58.    *      nicht ausgegeben werden!
  59.    *)
  60.  
  61.  
  62. PROCEDURE StdKeyCmd ( k: Key ): Commands;
  63.   (*
  64.    * Wertet den übergebenen Scan-Code mitsamt seines ASCII-Wertes aus
  65.    * und liefert entsprechende Befehle ('ctrl' wird ignoriert):
  66.    *
  67.    *  Taste          Befehl
  68.    *     Return         enter
  69.    *     Enter          enter
  70.    *     Undo           abort
  71.    *     <-             left
  72.    *     ->             right
  73.    *     Insert         insert
  74.    *     Backspace      backspace
  75.    *     Delete         delete
  76.    *     Esc            clrln
  77.    *     Clr (S-Home)   clrln
  78.    *     Home           clreol
  79.    *     Shift <-       wdleft
  80.    *     Shift ->       wdright
  81.    *     Ctrl <-        sol
  82.    *     Ctrl ->        eol
  83.    *     Ctrl Delete    delwdright
  84.    *                   (delwdleft wird nicht erkannt)
  85.    *     ansonsten      none
  86.    *)
  87.  
  88. PROCEDURE StdAscCmd ( k: Key ): Commands;
  89.   (*
  90.    * Wertet den übergebenen ASCII-Wertes in 'ch' aus und liefert entsprechende
  91.    * Befehle ('ctrl' und 'scan' werden ignoriert):
  92.    *
  93.    *  Taste          Befehl
  94.    *     CR, Ctrl-M     enter
  95.    *     Ctrl-C         abort
  96.    *     BS, Ctrl-H     backspace
  97.    *     Ctrl-U         right
  98.    *     DEL            delete
  99.    *     TAB            eol
  100.    *     ESC            clrln
  101.    *     Ctrl-X         clrln
  102.    *     ansonsten      none
  103.    *)
  104.  
  105. PROCEDURE StdWSCmd ( k: Key ): Commands;
  106.   (*
  107.    * Wertet den übergebenen ASCII-Wertes in 'ch' nach Word-Star-Belegung
  108.    * aus und liefert entsprechende Befehle ('ctrl' und 'scan' werden ignoriert):
  109.    *
  110.    *  Taste          Befehl
  111.    *     CR, Ctrl-M     enter
  112.    *     BS, Ctrl-H     backspace
  113.    *     Ctrl-S         left
  114.    *     Ctrl-D         right
  115.    *     Ctrl-V         insert
  116.    *     DEL            delete
  117.    *     ESC            clrln
  118.    *     Ctrl-A         sol
  119.    *     Ctrl-F         eol
  120.    *     Ctrl-T         delwdright
  121.    *     Ctrl-C         abort
  122.    *     ansonsten      none
  123.    *)
  124.  
  125. END StringEditor.
  126.